package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// Item 模拟数据库中的条目
type Item struct {
	ID    string `json:"id"`
	Name  string `json:"name"`
	Price uint   `json:"price"`
}

// items 模拟数据库，存储所有条目
var items = []Item{}

func main() {
	router := gin.Default()

	// 获取所有条目
	router.GET("/items", getAllItems)
	// 获取单个条目
	router.GET("/items/:id", getItemByID)
	// 创建新条目
	router.POST("/items", createItem)
	// 更新条目
	router.PUT("/items/:id", updateItem)
	// 删除条目
	router.DELETE("/items/:id", deleteItem)

	router.Run(":7000") // 监听并在 0.0.0.0:8080 上启动服务
}

// getAllItems 处理获取所有条目的请求
func getAllItems(c *gin.Context) {
	c.JSON(http.StatusOK, items)
}

// getItemByID 处理根据 ID 获取单个条目的请求
func getItemByID(c *gin.Context) {
	id := c.Param("id")
	for _, item := range items {
		if item.ID == id {
			c.JSON(http.StatusOK, item)
			return
		}
	}
	c.JSON(http.StatusNotFound, gin.H{"message": "item not found"})
}

// createItem 处理创建新条目的请求
func createItem(c *gin.Context) {
	var item Item
	if err := c.ShouldBindJSON(&item); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	items = append(items, item) // 添加到模拟数据库
	c.JSON(http.StatusCreated, item)
}

// updateItem 处理更新条目的请求
func updateItem(c *gin.Context) {
	id := c.Param("id")
	var item Item
	if err := c.ShouldBindJSON(&item); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	for i, it := range items {
		if it.ID == id {
			items[i] = item
			c.JSON(http.StatusOK, item)
			return
		}
	}
	c.JSON(http.StatusNotFound, gin.H{"message": "item not found"})
}

// deleteItem 处理删除条目的请求
func deleteItem(c *gin.Context) {
	id := c.Param("id")
	for i, item := range items {
		if item.ID == id {
			items = append(items[:i], items[i+1:]...) // 从模拟数据库中移除
			c.JSON(http.StatusOK, gin.H{"message": "item deleted"})
			return
		}
	}
	c.JSON(http.StatusNotFound, gin.H{"message": "item not found"})
}
